package com.dmp.storm.bolt.drools;//package com.dmp.storm.bolt.drools;
//
//import com.dmp.storm.bolt.BaseMapBolt;
//import org.kie.api.KieServices;
//import org.kie.api.runtime.KieContainer;
//import org.kie.api.runtime.KieSession;
//import org.kie.api.runtime.rule.FactHandle;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//
//import java.util.HashMap;
//import java.util.Map;
//
///**
// * Created by wangqiang on 2016/3/1.
// */
//public abstract class BaseDroolsBolt extends BaseMapBolt {
//    private static final long serialVersionUID = 1L;
//    Logger logger = LoggerFactory.getLogger(BaseDroolsBolt.class);
//    private KieSession kSession;
//
//    @Override
//    public void prepare() {
//        initDrools();
//    }
//
//    @Override
//    public Map<String, Object> process(Map<String, Object> map) {
//        long beginTime = System.currentTimeMillis();
//        Map<String, Object> _result = null;
//        //处理数据为drools制定格式
//        Object obj = initData(map);
//        if (obj != null) {
//            try {
//                kSession.insert(obj);
//                kSession.fireAllRules();
//            } catch (Exception e) {
//                logger.error("drools to handle log is failure !");
//                logger.error(e.getMessage());
//            } finally {
//                kSession.dispose();
//                kSession.retract(kSession.getFactHandle(obj));
//            }
//            _result = dealResultData(obj);
//        }
//
//
//        // end time
//        long endTime = System.currentTimeMillis();
//        float excTime = (float) (endTime - beginTime);
//        logger.info("{schedule_out_put:[TIME INFO]BaseDroolsBolt:beginTime:{},endTime:{},excTime:{}}", beginTime, endTime, excTime);
//        logger.info("{schedule_out_put:BaseDroolsBolt:---->send bolt:{}}", _result);
//        return _result;
//    }
//
//    private void initDrools() {
//        try {
//            KieServices ks = KieServices.Factory.get();
//            KieContainer kContainer = ks.getKieClasspathContainer();
//            kSession = kContainer.newKieSession("ksession-rules");
//        } catch (Exception e) {
//            e.printStackTrace();
//            throw e;
//        }
//    }
//
//    /**
//     * 处理数据为drools制定格式
//     *
//     * @param map
//     * @return
//     */
//    public abstract Object initData(Map<String, Object> map);
//
//    /**
//     * 处理事件流
//     *
//     * @param obj
//     * @return
//     */
//    public abstract Map<String, Object> dealResultData(Object obj);
//
//}
